/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.rocketmq.example.quickstart;

import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;

/**
 * This class demonstrates how to send messages to brokers using provided {@link DefaultMQProducer}.
 */
public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException, UnsupportedEncodingException, MQBrokerException, RemotingException {

        DefaultMQProducer producer = new DefaultMQProducer("debug_producers");
        producer.setNamesrvAddr("localhost:9876");
        producer.start();


        Message msg = new Message("debug_a" /* Topic */,
                "TagA" ,
                ("debug~~~当前时间"+ LocalDateTime.now() ).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
        );
        //延时消息
        msg.setDelayTimeLevel(5);


        //同步消息
        SendResult sendResult = producer.send(msg);
                System.out.printf("%s%n", sendResult);

        //异步消息
//
//        producer.send(msg, new SendCallback() {
//            @Override
//            public void onSuccess(SendResult sendResult) {
//                System.out.printf("%s%n", sendResult);
//            }
//
//            @Override
//            public void onException(Throwable e) {
//                e.printStackTrace();
//            }
//        });



//异步消息注意 直接结束的话，如果消息未发送就会报异常
        producer.shutdown();
    }
}
